const httpURL = 'https://www.yibukj.com:8023';  // 远程
const imgURL = 'https://www.yibukj.com:8023/ph/';  // 图片大图
const shareUrl = 'https://www.yibukj.com';  // 图片大图
// const httpURL = 'http://192.168.0.102:8023';  // 佳卓
// const httpURL = 'http://47.104.146.107:80';  // 佳卓
import store from '@/store';

/**
 * 请求之前
 * @param url url 路径
 * @param data 请求参数
 * @param method 类型
 * @param loginingFLag  是否加载动画
 * @returns {{method: string, data, url: string}}
 */
function ajaxBefore(url, data = {}, method='GET', loginingFLag  = true){
    // console.log('接口：' + httpURL + url);
    // console.log('参数：');
    // console.log(data);
    if (loginingFLag === true) {
       uni.showLoading({
           title: '加载中',
           mask:true
       });
    }
    let obj = {
        url: httpURL + url,
        method,
        data,
    };
    const token = uni.getStorageSync('token');
    if (token) {
        obj = {
            ...obj,
            header:{
                'token' : token
            }
        }
    }
    return obj;
}

/**
 *  请求之后拦截
 * @param res 请求返回数据
 */
function ajaxAfter(res){
    // console.log('请求成功; 数据：');
    // console.log(res);

    if (res.data && res.data.data && res.data.data.token) {
        uni.setStorage({
            key: 'token',
            data:  res.data.data.token,
            success:()=>{
                // console.log('---------------------跟新------------------token---------更新-------------');
            }
        });
    }
    if (res.data.code === 0) {

    } else {
        uni.hideLoading();
        let title = res.data.message || '服务器错误';
        if (res.statusCode == 401 || res.data.code == 401){
            logout();
            return;
        }
        setTimeout(()=>{
            uni.showToast({
                position: 'top ',
                title: title,
                duration: 2000,
                icon: 'none'
            });
        },200)
    }
}

/**
 *  注销登录
 */
function logout(){
    store.commit('logout');

    let title = '用户登录状态失效 请重新登录';
    setTimeout(()=>{
        uni.showToast({
            title: title,
            icon: 'none',
            duration: 2000,
            position: 'top '
        });
    },200)
}

/**
 * ajax
 * @param obj 请求对象
 * @param resolve 成功回调
 * @param reject 失败回调
 * @param loginingFLag 是否加载请求动画
 */
const ajax = (obj, resolve, reject, loginingFLag)=>{
    if (obj.url.indexOf('undefined') > 0){
        return
    }
    uni.request({
        ... obj,
        success: (res) => {
            ajaxAfter(res);
            resolve(res.data)
        },
        // 接口调用失败的回调函数
        fail(res) {
            uni.hideLoading();
            setTimeout(()=>{
                uni.showToast({
                    position:'top',
                    title: '网络连接超时',
                    icon: 'none',
                    duration: 1500,
                });
            },200);
            reject();
        },
        // 接口调用结束的回调函数（调用成功、失败都会执行）
        complete(res) {
            // 关闭下拉刷新动画
            uni.stopPullDownRefresh();
            if (loginingFLag){
                uni.hideLoading();
            }
        }
    });
};
/**
 * POST 请求
 * @param url
 * @param data 请求参数
 * @param loginingFLag 是否加载请求动画
 * @returns {Promise<any>}
 * @constructor
 */
const POST =  (url, data={}, loginingFLag=true) => {
    return new Promise((resolve, reject)=>{
        let obj = ajaxBefore(url,data, "POST", loginingFLag);
        ajax(obj, resolve, reject, loginingFLag)
    });
};

/**
 * GET 请求
 * @param url
 * @param data  请求参数
 * @param loginingFLag  是否加载请求动画
 * @returns {Promise<any>}
 * @constructor
 */
const GET = (url, data={}, loginingFLag=true)=> {
    return new Promise((resolve, reject)=>{
        let obj = ajaxBefore(url,data, "GET", loginingFLag);
        ajax(obj, resolve, reject, loginingFLag)
    });
};
export default {
    GET,
    POST,
    httpURL,
    shareUrl,
	imgURL
}
